package com.example.myapplication;
import java.util.List;
import com.example.myapplication.UserResponse;
import com.example.myapplication.RetrofitClient;
import com.example.myapplication.UserApiService;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

// 数据仓库：统一管理“用户数据”的获取（网络/本地数据库，此处仅网络）
public class UserRepository {
    private final UserApiService userApiService;

    // 构造：初始化API服务（通过Retrofit单例获取）
    public UserRepository() {
        this.userApiService = RetrofitClient.getInstance().getUserApiService();
    }
    public void getUsers(ResultCallback<List<User>> resultCallback) {
        // 后续可补充实现逻辑
    }


    // 定义“获取用户列表”的回调接口（将结果传给ViewModel）
    public interface GetUserListCallback {
        void onSuccess(UserResponse userResponse); // 请求成功（有数据/空数据）
        void onFailure(String errorMsg); // 请求失败（网络错误/解析错误/状态码错误）
    }

    // 核心方法：发起“获取用户列表”网络请求
    public void getUserList(GetUserListCallback callback) {
        // 调用Retrofit生成的接口方法
        Call<UserResponse> call = userApiService.getUserList();

        // 异步请求（非主线程，避免阻塞UI）
        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                // 1. 状态码判断：200-299为成功
                if (response.isSuccessful()) {
                    // 2. 拿到响应数据（可能为null）
                    UserResponse userResponse = response.body();
                    callback.onSuccess(userResponse); // 传给ViewModel处理
                } else {
                    // 3. 状态码错误（4xx/5xx）：返回错误信息
                    String errorMsg = "服务器错误：" + response.code(); // 如“服务器错误：404”
                    callback.onFailure(errorMsg);
                }
            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                // 4. 请求失败（无网络/超时/解析错误）：返回异常信息
                String errorMsg = t.getMessage() != null ? t.getMessage() : "网络连接失败，请稍后再试";
                callback.onFailure(errorMsg);
            }
        });
    }

    public class ResultCallback<T> {
    }
}